home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Night Owl 6
/
Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso
/
037a
/
wedits22.zip
/
WESTRING.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1991-08-14
|
4KB
|
161 lines
UNIT WEString;
{ -- This is the Low Level Strings unit of WWIVEdit 2.2
-- Last Updated : 8/14/91
-- Written By:
-- Adam Caldwell
--
-- This code is Public Domain
--
-- Purpose : Provide Low level string manipulation routines
--
-- Know Errors: None
--
-- Planned Enhancements : Improvement of Go_Left and Go_Right
--
-- }
{$R-,V-,S-,B-,E-,N-} { These Optomize things as much as possible }
INTERFACE
FUNCTION cstr(i:longint):string; { Converts a number to a string }
FUNCTION ZExpand(i:LongInt; { Converts an integer into a string and }
len : byte):string;{ and adds enough zeros at the beginning }
{ to make is LEN characters long }
FUNCTION Dup(c:char; n:integer) { Returns a string of length "n" full of }
: string; { character "c" }
FUNCTION value(I : string) : integer;
FUNCTION TransformString(s:string):string;
PROCEDURE StripEndString(VAR s:string);
FUNCTION GoLeft(s:string; i:byte):byte;
FUNCTION GoRight(s:string; i:byte):byte;
FUNCTION LengthW(s:string):integer;
FUNCTION LeftS(s:string; n:integer):string; {Returns the Left N characters }
FUNCTION RightS(s:string; n:integer):string;{Returns the Right N characters }
FUNCTION CmpLeft(source, Target:string):boolean;
FUNCTION CmpLeftI(source,target:string):boolean;
IMPLEMENTATION
FUNCTION CmpLeft(source,target:string):boolean;
BEGIN
CmpLeft:=LeftS(source,Length(target))=target;
END;
FUNCTION CmpLeftI(source,target:string):boolean;
BEGIN
CmpLeftI:=CmpLeft(TransformString(source),TransformString(target));
END;
FUNCTION LeftS(s:string; n:integer):string;
BEGIN
LeftS:=copy(s,1,n);
END;
FUNCTION RightS(s:string; n:integer):string;
BEGIN
RightS:=copy(s,length(s)-n+1,n);
END;
FUNCTION value(I : string) : integer;
VAR n,n1 : integer;
BEGIN
val(i,n,n1);
IF n1 <> 0 THEN BEGIN
i := copy(i,1,n1-1);
val(i,n,n1)
END;
value := n;
END;
FUNCTION TransformString(s:string):string;
VAR x:integer;
BEGIN
StripEndString(s);
FOR x:=1 TO Length(s) DO
s[x]:=upcase(s[x]);
TransformString:=s;
END;
PROCEDURE StripEndString(VAR s:string);
{ Strips off the end of a string }
BEGIN
WHILE (length(s)>0) AND (s[length(s)]=' ') DO
delete(s,length(s),1);
END;
FUNCTION cstr(i : longint) : string;
VAR c : string;
BEGIN
str(i,c);
cstr := c;
END;
FUNCTION ZExpand(i:LongInt; len:byte):string;
VAR
negative:boolean;
result:string;
x:byte;
BEGIN
Negative:=i<0;
IF negative then i:=-i;
result:=cstr(i);
FOR x:=length(result) TO len-1 DO
result:='0'+result;
IF negative THEN result[1]:='-';
ZExpand:=Result
END;
FUNCTION Dup(c:char; n:integer):string;
VAR
s:string;
BEGIN
IF n IN [1..255] THEN
BEGIN
FillChar(s[1],n,c);
s[0]:=chr(n);
Dup:=s;
END ELSE dup:='';
END;
FUNCTION GoLeft(s:string; i:byte):byte;
{ A simple word left function... needs improvement }
BEGIN
IF i>length(s) THEN i:=length(s);
IF i>2 THEN
REPEAT
dec(i);
UNTIL (i=1) OR (s[i-1] = ' ')
ELSE i:=1;
GoLeft:=i;
END;
FUNCTION GoRight(s:string; i:byte):byte;
{ A very simple Word Right function... Could be improved }
BEGIN
IF i<=length(s) THEN
REPEAT
inc(i)
UNTIL (i=length(s)) OR (s[i] =' ');
GoRight:=i+1
END;
FUNCTION LengthW(s:string):integer;
VAR l,i:integer;
BEGIN
l:=0;
FOR i:=1 TO Length(s) DO
BEGIN
l:=l+1;
IF s[i]=^C THEN l:=l-2
ELSE IF s[i]=^H THEN l:=l-2
END;
Lengthw:=l;
END;
END.